批量Excel数据导入Oracle数据库 您所在的位置:网站首页 excel导入oracle数据库 工具 批量Excel数据导入Oracle数据库

批量Excel数据导入Oracle数据库

2023-07-02 04:44| 来源: 网络整理| 查看: 265

由于一直基于Oracle数据库上做开发,因此常常会需要把大量的Excel数据导入到Oracle数据库中,其实如果从事SqlServer数据库的开发,那么思路也是一样的,本文主要介绍如何导入Excel数据进入Oracle数据库的内容。

一般我们拿到的Excel数据,都会有一个表头说明,然后下面是一连串的数据内容,如下图所示:

 

而Oracle中数据库一般为英文名称,中文名称就需要转义,为了方便导入,我把中文名称对照数据库的字段,把表头修改为对应的字段名称,如果没有数据库对应的字段,那么删除Excel的无用列即可,如下所示。

 

首先我们在导入Excel的例子中加载显示要导入的数据,一个是为了直观,第二个也是为了检查数据的有效性,避免出错,界面如下所示:

 

在介绍导入操作前,我们先要分析下数据,否则就很容易出现错误的语句,一般日期的格式、数字的格式就要特别注意,文本格式一般看是否超出字段的长度,一般成功导入前都会发生好多次的错误问题,解决了这些格式的问题,基本上就OK了。如下面日期和数字的格式问题,就必须注意转换为对应的内容格式:

 

 

下面介绍具体的显示数据和导入数据的操作代码:

 显示Excel数据的代码如下所示:

 代码

        private string connectionStringFormat = "Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source = '{0}';Extended Properties=Excel 8.0";        private DataSet myDs = new DataSet();

        

private void btnViewData_Click(object sender, EventArgs e)        {            if (this.txtFilePath.Text == "")            {                MessageUtil.ShowTips("请选择指定的Excel文件");                return;            }

            

string connectString = string.Format(connectionStringFormat, this.txtFilePath.Text);            try            {                myDs.Tables.Clear();                myDs.Clear();                OleDbConnection cnnxls = new OleDbConnection(connectString);                OleDbDataAdapter myDa = new OleDbDataAdapter("select * from [Sheet1$]", cnnxls);                myDa.Fill(myDs, "c");

                dataGrid1.DataSource 

= myDs.Tables[0];            }            catch (Exception ex)            {                MessageBox.Show(ex.Message);            }        }

 

 

导入操作的代码如下所示(由于数据格式需要验证,以及需要判断数据库是否存在指定关键字的记录,如果存在,那么更新,否则插入新的记录,如果仅仅是第一次导入,操作代码可以更为精简一些):

 代码

        private void btnSaveData_Click(object sender, EventArgs e)        {            if (this.txtFilePath.Text == "")            {                MessageUtil.ShowTips("请选择指定的Excel文件");                return;            }

            

if (MessageUtil.ShowYesNoAndWarning("该操作将把数据导入到系统的用户数据库中,您确定是否继续?") == DialogResult.Yes)            {                InsertData();            }        }

        

private bool CheckIsDate(string columnName)        {            string str = ",PREPARE_DATE,COPY_DATE,COPY_VALIDITY,BUSINESS_VALIDITY,OPENING_APPROVAL_DATE,OPENING_DATE,EDITTIME,LICENSE_DATE,LICENSE_VALIDITY,TEMP_OPENING_DATE,LICENSE_START_DATE,ADDTIME,EDITTIME,";            return str.Contains("," + columnName.ToUpper() + ",");        }

        

private bool CheckIsNumeric(string columnName)        {            string str = ",FIXED_CAPITAL,REG_CAPITAL,MARGIN,PARK_AREA,PARK_SPACE_NUMBER,";            return str.Contains("," + columnName.ToUpper() + ",");        }

        

private void InsertData()        {            int intOk = 0;            int intFail = 0;

            

if (myDs != null && myDs.Tables[0].Rows.Count > 0)            {                string accessConnectString = config.GetConnectionString("DataAccess");                OracleConnection conn = new OracleConnection(accessConnectString);                conn.Open();                OracleCommand com = null;

                

#region 组装字段列表                string insertColumnString = "ID,";                DataTable dt = myDs.Tables[0];                int k = 0;                foreach (DataColumn col in dt.Columns)                {                    insertColumnString += string.Format("{0},", col.ColumnName);                }                insertColumnString = insertColumnString.Trim(',');

                

#endregion

                

try                {                    foreach (DataRow dr in dt.Rows)                    {                        if (dr[0].ToString() == "")                        {                            continue;                        }

                        

#region 组装Sql语句                        string insertValueString = "SEQ_TBPARK_ENTERPRISE.Nextval,";                        string updateValueString = "";                        string COMPANY_CODE = dr["COMPANY_CODE"].ToString().Replace("", "");

                        

#region 拼接Sql字符串

                        

for(int i = 0; i  0;                            if (exist)                            {                                //需要更新                                //WriteString(updateSql);                                com.CommandText = updateSql;                                succeed = com.ExecuteNonQuery() > 0;                            }                            else                            {                                //需要插入                                //WriteString2(insertSql);                                com.CommandText = insertSql;                                succeed = com.ExecuteNonQuery() > 0;                            }

                            

if (succeed)                            {                                intOk++;                            }                            else                            {                                intFail++;                            }                        }                        catch (Exception ex)                        {                            intFail++;                            WriteString(com.CommandText);                            LogHelper.Error(ex);                            break;                        }

                        

#endregion                    }

                    

#region 关闭                    if (conn != null && conn.State != ConnectionState.Closed)                    {                        conn.Close();                    }                    if (com != null)                    {                        com.Dispose();                    }                    #endregion                }                catch (Exception ex)                {                    LogHelper.Error(ex);                    MessageUtil.ShowError(ex.ToString());                }

                

if (intOk > 0 || intFail > 0)                {                    string tips = string.Format("数据导入成功:{0}个,失败:{1}个", intOk, intFail);                    MessageUtil.ShowTips(tips);                }            }        }

 

以上代码,为了方便,使用了输出脚本的方式进行验证对比,一般情况下也是用得着的。

最后附上该程序的源码,和大家分享学习:https://files.cnblogs.com/wuhuacong/ImportExcelToOracle.rar 



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有